<script setup lang="ts">
import useStore from '../store';

const { todos } = useStore();

// 数据持久化 - 订阅
todos.$subscribe(() => {
  localStorage.setItem('Pinia-todos-list', JSON.stringify(todos.list));
});

/**
 * 数据持久化 - 订阅
 * 1. $subscribe() 函数监听 todos 的变化，一旦变化就把数据存储到本地
 * 2. 注意：本地存储只能保存字符串，需要主动 JSON.stringify()
 * 3. Pinia 中状态的数据就可以从本地存储中获取了
 * 注意：1. 本地存储中获取的数据有可能是空数组，获取到的值是字符串，需要主动 JSON.parse()
 *       2. 从本地获取的数据 ts 并不知道他的类型是怎么样的所以要给他指定类型并断言
 */
</script>

<template>
  <section class="main">
    <input id="toggle-all" class="toggle-all" type="checkbox" :checked="todos.isCheckedAll" @change="todos.checkedAllTodos()" />
    <label for="toggle-all">Mark all as complete</label>
    <ul class="todo-list">
      <li :class="{ completed: item.done }" v-for="item in todos.list" :key="item.id">
        <div class="view">
          <input class="toggle" type="checkbox" :checked="item.done" @change="todos.changeDone(item.id)" />
          <label>{{ item.content }}</label>
          <button class="destroy" @click="todos.delTodo(item.id)"></button>
        </div>
        <input class="edit" value="Create a TodoMVC template" />
      </li>
    </ul>
  </section>
</template>

<style lang="less" scoped></style>
